﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Logica;
using Datos;
using Datos.Entidades;
using Logica.Comandos;
using Datos.Fabricas;
using Logica.FabricaLogica;
using Datos.Entidades.FabricaEntidades;
using Logica.Comandos.AdministracionUsuarios;


namespace Pruebas
{
    [TestFixture]
    public class PruebasUsuario
    {
        private int id;
        public void PruebaUsuario()
        {
           
        }
        /// <summary>
        /// Valida el ingreso de un usuario
        /// </summary>
        [TestCase]
        public void PruebaIngresarUsuario()
        {
            bool esperado = false;
          
            Entidad crearUsuario = FabricaEntidades.ObtenerUsuario(); 

            (crearUsuario as Usuario).Nombre = "Prueba";
            (crearUsuario as Usuario).Apellido = "Prueba";
            (crearUsuario as Usuario).Cedula = 18567234;
            (crearUsuario as Usuario).Fk_Id_Rol = 1;
            (crearUsuario as Usuario).Telefono =04123456789;
            (crearUsuario as Usuario).Email = "prueba@hotmail.com";
            (crearUsuario as Usuario).Clave ="4567";
            (crearUsuario as Usuario).Login ="prueba";
            (crearUsuario as Usuario).Estatus="Activo";
            (crearUsuario as Usuario).ClaveCifrada = "3f1b7ccad63d40a7b4c27dda225bf941";


            // Consulta en la BD
            Comando comandoUsuario = FabricaComandoUsuario.ObtenerComandoInsertarUsuario();
            comandoUsuario.Entidad = crearUsuario;
       

            (comandoUsuario as InsertarUsuario).Ejecutar();
            esperado = comandoUsuario.Flag;

            //Si se ingreso el usuario

            Assert.AreEqual(esperado, true);

          
            
        }
        [TestCase]
        public void PruebaUsuarioExiste()
        {

           
            bool respuesta = false;
            Entidad verUsuario = FabricaEntidades.ObtenerUsuario();
            Entidad usuario = new Entidad();

            (verUsuario as Usuario).ClaveCifrada = "3f1b7ccad63d40a7b4c27dda225bf941";
            (verUsuario as Usuario).Login = "prueba";

            Comando comandousuario = FabricaComandoUsuario.ObtenerComandoUsuarioLogin();
            comandousuario.Entidad = verUsuario;
            (comandousuario as ComandoConsultarUsuarioLogin).Ejecutar();
            usuario = comandousuario.Entidad;

            if ((usuario as Usuario).Id_Usuario == 0)
            {
                respuesta = false;
            }
            else
            {
              
                respuesta =true;

            }

            Assert.AreEqual(respuesta, true);
        }
        [TestCase]
        public void PruebaUltimoUsuario()
        {
            
            Entidad usuario = FabricaEntidades.ObtenerUsuario();
            Comando comando = FabricaComandoUsuario.ObtenerComandoMaxUsuario();
            (comando as ComandoConsultarMaxUsuario).Ejecutar();
            usuario = comando.Entidad;

            id = (usuario as Usuario).Id_Usuario;



            Assert.AreNotEqual(id, 0);
           
        }


        [TestCase]
        public void PruebaModificarUsuario()
        {
            Boolean esperado = false;

            Entidad usuario = FabricaEntidades.ObtenerUsuario();
            Comando comando = FabricaComandoUsuario.ObtenerComandoMaxUsuario();
            (comando as ComandoConsultarMaxUsuario).Ejecutar();
            usuario = comando.Entidad;

            id = (usuario as Usuario).Id_Usuario;
            Entidad modificarUsuario = FabricaEntidades.ObtenerUsuario(); // Inicializacion del usuario


            (modificarUsuario as Usuario).Id_Usuario = id;
            (modificarUsuario as Usuario).Nombre = "Prueba";
            (modificarUsuario as Usuario).Apellido = "Prueba";
            (modificarUsuario as Usuario).Cedula = 18567234;

            (modificarUsuario as Usuario).Telefono = 04123456789;
            (modificarUsuario as Usuario).Email = "prueba@hotmail.com";
            (modificarUsuario as Usuario).Clave = "4567";
            (modificarUsuario as Usuario).Login = "prueba";
            (modificarUsuario as Usuario).Estatus = "Activo";

            //Consultar en la BD
            Comando comandoUsuario = FabricaComandoUsuario.ObtenerComandoModificarUsuario();
            comandoUsuario.Entidad = modificarUsuario;
          

            (comandoUsuario as ComandoModificarUsuario).Ejecutar();
            esperado = comandoUsuario.Flag;

            //Si se modifico el usuario

            Assert.AreEqual(esperado, true);
           
        
        }
        [TestCase]
        public void PruebaEliminarUsuario()
        {
            Boolean respuestaUsuario = false;
            Entidad usuario = FabricaEntidades.ObtenerUsuario();
            Comando comando = FabricaComandoUsuario.ObtenerComandoMaxUsuario();
            (comando as ComandoConsultarMaxUsuario).Ejecutar();
            usuario = comando.Entidad;

            id = (usuario as Usuario).Id_Usuario;
            Entidad eliminarUsuario = FabricaEntidades.ObtenerUsuario(); // Inicializacion del Usuario

            (eliminarUsuario as Usuario).Id_Usuario = id;
            (eliminarUsuario as Usuario).Nombre = "Prueba";
            (eliminarUsuario as Usuario).Apellido = "Prueba";
            (eliminarUsuario as Usuario).Cedula = 18567234;

            (eliminarUsuario as Usuario).Telefono = 04123456789;
            (eliminarUsuario as Usuario).Email = "prueba@hotmail.com";
            (eliminarUsuario as Usuario).Clave = "4567";
            (eliminarUsuario as Usuario).Login = "prueba";
            (eliminarUsuario as Usuario).Estatus = "Inactivo";

            //Consultar en la BD
            Comando comandoUsuario = FabricaComandoUsuario.ObtenerComandoModificarUsuario();
            comandoUsuario.Entidad = eliminarUsuario;
          

            (comandoUsuario as ComandoModificarUsuario).Ejecutar();
            respuestaUsuario = comandoUsuario.Flag;

            //Si se elimino el usuario

            Assert.AreEqual(respuestaUsuario, true);

         
        }

    }
}
